package com.firefightingiot.firefightingiot.support.udp;

import cn.hutool.json.JSONObject;
import org.springframework.stereotype.Component;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

@Component
public class UdpServer {

    public void server() throws Exception {
        // 创建服务器端的DatagramSocket，并指定端口
        DatagramSocket datagramSocket = new DatagramSocket(4568);
        System.out.println("*****  启动服务器，等待客户端的连接请求  ******");
        while(true) {
            byte[] data = new byte[2048];
            // 创建数据报，用户接受客户端请求的数据
            DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
            // 接收客户端请求的数据（在接收到数据之前一直处于阻塞状态）
            datagramSocket.receive(datagramPacket);
            // 获取请求的数据，并转成String打印出来
            String clientData = new String(data, 0, datagramPacket.getLength(),"GBK");
            Map<String,Object> map = handleMes(clientData);
            JSONObject jsonObject = new JSONObject();
            if(map.size() > 0){
                Set<String> set = map.keySet();
                for(String key : set){
                    jsonObject.put(key,map.get(key));
                }
            }
            System.out.println("我是服务端，客户端请求的数据为：" + clientData);
            //  *** 给客户端进行相应 ***
            // 定义客户端的地址
            InetAddress inetAddress = datagramPacket.getAddress();
            int port = datagramPacket.getPort();
            byte[] backData = jsonObject.toString().getBytes("GBK");
            // 创建数据包，给客户端响应数据
            DatagramPacket backDatagramPacket = new DatagramPacket(backData, backData.length, inetAddress, port);
            // 给客户端发送数据
            datagramSocket.send(backDatagramPacket);
        }
    }
    //@Transactional
    public Map<String,Object> handleMes(String message){
        System.out.println(message);
        Map<String,Object> map = new HashMap<>();
        //数据解析
        JSONObject jsonObject = null;
        boolean flag = false;
        String typeFlag = null;
        try{
            //jsonObject = JSONUtil.parseObj(message);
            map.put("code",0);
        }catch (Exception e){
            e.printStackTrace();
            map.put("code",1);
            map.put("msg","服务器错误");
            return map;
        }
        return map;
    }

}
